package com.xinqi.modules.course.clazz.service;

import com.xinqi.common.base.user.Account;
import com.xinqi.common.core.enums.ChatRemindTypeEnum;
import com.xinqi.modules.course.clazz.domain.ClassGroupStudentEntity;
import com.xinqi.modules.course.clazz.domain.ClassStudentEntity;
import com.xinqi.modules.course.clazz.dto.rsp.ClassGroupResultDTO;
import com.xinqi.modules.course.comment.domain.CommentEntity;

import java.util.List;

/**
 * 新奇提醒服务接口
 *
 * @Author：yyzhen
 * @Package：com.xinqi.modules.course.course.clazz.listener.api
 * @Project：XingqiClass-Cloud-Plus
 * @name：ChatRemindSyncService
 * @Date：2023/5/11 15:25
 * @Filename：ChatRemindSyncService
 */
public interface ChatRemindSyncService {

    /**
     * 新奇提醒机器人 -- 评论
     *
     * @param user   操作人
     * @param entity 评论实体
     */
    public void commentChatRemind(Account user, CommentEntity entity);

    /**
     * 新奇提醒机器人 -- 回复
     *
     * @param user   操作人
     * @param entity 被回复实体
     */
    public void replyChatRemind(Account user, CommentEntity entity);

    /**
     * 新奇提醒机器人 -- 点赞
     *
     * @param user   操作人
     * @param entity 被点赞实体
     */
    public void giveChatRemind(Account user, CommentEntity entity);

    /**
     * 新奇提醒机器人 -- 被邀请加入备课区
     *
     * @param operationUser 操作人
     * @param prepareId     备课区ID
     * @param userId        被邀请用户ID
     */
    public void joinPrepare(String operationUser, Long prepareId, Long userId);

    /**
     * 新奇提醒机器人 -- 你被移出备课区通知
     *
     * @param operationUser 操作人
     * @param prepareId     备课区ID
     * @param userId        被移除用户ID
     */
    public void dropPrepare(String operationUser, Long prepareId, Long userId);

    /**
     * 新奇提醒机器人 -- 你被移出备课区通知 -- 批量
     *
     * @param operationUser 操作人
     * @param prepareId     备课区ID
     * @param userIds       被移除用户ID
     */
    public void batchDropPrepare(String operationUser, Long prepareId, List<Long> userIds);

    /**
     * 新奇提醒机器人 -- 主动退出备课区
     *
     * @param operationUser 操作人
     * @param prepareId     备课区ID
     */
    public void quitPrepare(String operationUser, Long prepareId);

    /**
     * 新奇提醒机器人 -- 成员入课 -- 审核
     *
     * @param classId    班级ID
     * @param courseName 课程名称
     * @param className  班级名称
     */
    public void applyClass(Long classId, String courseName, String className);

    public void teacherReject(Long classId, Long studentId, String courseName, String className);

    /**
     * 新奇提醒机器人 -- 成员加入班级通知老师
     *
     * @param classId   班级ID
     * @param relationId 加入学生ID
     * @param type      入课方式
     */
    public void studentJoinClass(Long classId, Long relationId, ChatRemindTypeEnum type);

    public void acceptPass(Long classId, Long relationId, ChatRemindTypeEnum type);

    /**
     * 新奇提醒机器人 -- 成员退出班级
     *
     * @param classId   班级ID
     * @param studentId 退出学生
     */
    public void studentQuitClass(Long classId, Long studentId, String studentName, Account user);

    /**
     * 新奇提醒机器人 -- 小组变动 -- 发起自由分组
     *
     * @param classId       班级ID
     * @param groupName     自由分组名称
     * @param operationUser 操作人名称
     */
    public void freeGroup(Long classId, String groupName, String operationUser);

    /**
     * 新奇提醒机器人 -- 小组变动 -- 系统随机分组
     *
     * @param classId   班级ID
     * @param groupName 主分组名称
     * @param sonIdList 子小组ID集合
     */
    public void randomGroup(Long classId, String groupName, List<Long> sonIdList);

    /**
     * 新奇机器人 -- 小组变动 -- 被移入小组通知
     *
     * @param operationUser 操作人名称
     * @param studentId     学生ID
     * @param group         移入小组
     */
    public void studentJoinGroup(String operationUser, Long studentId, ClassGroupResultDTO group);

    /**
     * 新奇机器人 -- 小组变动 -- 被移出小组通知
     *
     * @param operationUser 操作人名称
     * @param studentId     学生ID
     * @param group         移除小组
     */
    public void studentDropGroup(String operationUser, Long studentId, ClassGroupResultDTO group);

    /**
     * 新奇机器人 -- 小组变动 -- 退出班级小组通知
     *
     * @param operationUser 操作人名称
     * @param studentId     学生ID
     * @param group         退出小组
     */
    public void studentQuitGroup(String operationUser, Long studentId, ClassGroupResultDTO group);

    /**
     * 新奇机器人 -- 小组变动 -- 被设为小组组长
     *
     * @param operationUser 操作人名称
     * @param studentId     学生ID
     * @param group         设置小组
     */
    public void studentSetGroupTeamLeader(String operationUser, Long studentId, ClassGroupResultDTO group);

    /**
     * 新奇机器人 -- 小组变动 -- 更换小组
     *
     * @param operationUser 操作人名称
     * @param group         更换后小组
     * @param entityList    更换学生
     */
    public void studentBatchChangeGroup(String operationUser, ClassGroupResultDTO group, List<ClassStudentEntity> entityList);

    /**
     * 新奇机器人 -- 小组变动 -- 被移入小组通知
     *
     * @param operationUser 操作人名称
     * @param entityList    移入学生
     */
    public void studentBatchJoinGroup(String operationUser, List<ClassGroupStudentEntity> entityList);

    /**
     * 新奇机器人 -- 小组变动 -- 被移出小组通知
     *
     * @param entityList 移出学生
     */
    public void studentBatchDropGroup(List<ClassGroupStudentEntity> entityList, Account user);

    /**
     * 新奇机器人 -- 身份变更 -- 学生变课代表
     *
     * @param classId   班级ID
     * @param studentId 学生ID
     */
    public void studentChangeRepresentative(Long classId, Long studentId, Account user);

    /**
     * 新奇机器人 -- 身份变更 -- 课代表变学生
     *
     * @param classId   班级ID
     * @param studentId 学生ID
     */
    public void representativeChangeStudent(Long classId, Long studentId, Account user);

    /**
     * 新奇机器人 -- 身份变更 -- 学生变助教
     *
     * @param classId   班级ID
     * @param studentId 学生ID
     */
    public void studentChangeAssistant(Long classId, Long studentId, Account user);

    /**
     * 新奇机器人 -- 身份变更 -- 助教变学生
     *
     * @param classId   班级ID
     * @param studentId 学生ID
     */
    public void assistantChangeStudent(Long classId, Long studentId, Account user);

    /**
     * 新奇机器人 -- 身份变更 -- 课代表变助教
     *
     * @param classId   班级ID
     * @param studentId 学生ID
     */
    public void representativeChangeAssistant(Long classId, Long studentId, Account user);

    /**
     * 新奇机器人 -- 身份变更 -- 助教变课代表
     *
     * @param classId   班级ID
     * @param studentId 学生ID
     */
    public void assistantChangeRepresentative(Long classId, Long studentId, Account user);

}
